package models

// --------------- 商户进件接口请求响应 ---------------

// MerchantIncomingAddRequest 商户进件请求
type MerchantIncomingAddRequest struct {
	OrgBaseRequest
	// 商户基础信息
	BaseInfo *BaseInfo `json:"base_info,omitempty"`
	// 商户身份信息
	IdentificationInfo *IdentificationInfo `json:"identification_info,omitempty"`
	// 商户经营信息
	BusinessInfo *BusinessInfo `json:"business_info,omitempty"`
	// 商户结算账户信息
	SettlementInfo *SettlementInfo `json:"settlement_info,omitempty"`
	// 商户结算规则、费率规则
	SettlementRule *SettlementRule `json:"settlement_rule,omitempty"`
	// 渠道信息、银行合作信息等
	AdditionalInfo *AdditionalInfo `json:"additional_info,omitempty"`
	// 是否给商户发短信
	SmsConfig *SmsConfig `json:"sms_config,omitempty"`
	// 开通商户业务功能
	FuncInfo *FuncInfo `json:"func_info,omitempty"`
	// 品牌连锁商户进件配置信息
	ChainStoreInfo *ChainStoreInfo `json:"chain_store_info,omitempty"`
	// 品牌信息
	BrandInfo *BrandInfo `json:"brand_info,omitempty"`
	// 原始请求数据Map（用于直接传递JSON请求数据）
	RawRequestMap map[string]interface{} `json:"-"`
}

// NewMerchantIncomingAddRequest 创建商户进件请求
func NewMerchantIncomingAddRequest() *MerchantIncomingAddRequest {
	req := &MerchantIncomingAddRequest{}
	// 默认添加敏感字段，与Python SDK保持一致
	// 基础信息中的敏感字段
	req.AddSensitiveField("base_info.contact_info.contact_name")
	req.AddSensitiveField("base_info.contact_info.contact_phone")
	req.AddSensitiveField("base_info.contact_info.contact_id_no")

	// 身份信息中的敏感字段
	req.AddSensitiveField("identification_info.identity_info.id_card_name")
	req.AddSensitiveField("identification_info.identity_info.id_card_english_name")
	req.AddSensitiveField("identification_info.identity_info.id_card_no")
	req.AddSensitiveField("identification_info.identity_info.legal_person_phone")
	req.AddSensitiveField("identification_info.identity_info.id_card_address")

	// 结算信息中的敏感字段
	req.AddSensitiveField("settlement_info.account_info.account_no")
	req.AddSensitiveField("settlement_info.account_info.account_name")
	req.AddSensitiveField("settlement_info.account_info.bank_set_phone")
	req.AddSensitiveField("settlement_info.account_info.delegatee_name")
	req.AddSensitiveField("settlement_info.account_info.delegatee_id_card")
	req.AddSensitiveField("settlement_info.account_info.delegatee_phone")

	// 补充信息中的敏感字段
	req.AddSensitiveField("additional_info.specs_info.account_no")
	req.AddSensitiveField("additional_info.specs_info.account_name")

	// 品牌信息中的敏感字段
	req.AddSensitiveField("brand_info.contact_name")
	req.AddSensitiveField("brand_info.contact_phone")

	return req
}

// SetBaseInfo 设置商户基础信息
func (r *MerchantIncomingAddRequest) SetBaseInfo(info *BaseInfo) *MerchantIncomingAddRequest {
	r.BaseInfo = info
	return r
}

// SetIdentificationInfo 设置商户身份信息
func (r *MerchantIncomingAddRequest) SetIdentificationInfo(info *IdentificationInfo) *MerchantIncomingAddRequest {
	r.IdentificationInfo = info
	return r
}

// SetBusinessInfo 设置商户经营信息
func (r *MerchantIncomingAddRequest) SetBusinessInfo(info *BusinessInfo) *MerchantIncomingAddRequest {
	r.BusinessInfo = info
	return r
}

// SetSettlementInfo 设置商户结算账户信息
func (r *MerchantIncomingAddRequest) SetSettlementInfo(info *SettlementInfo) *MerchantIncomingAddRequest {
	r.SettlementInfo = info
	return r
}

// SetSettlementRule 设置商户结算规则、费率规则
func (r *MerchantIncomingAddRequest) SetSettlementRule(rule *SettlementRule) *MerchantIncomingAddRequest {
	r.SettlementRule = rule
	return r
}

// SetAdditionalInfo 设置渠道信息、银行合作信息等
func (r *MerchantIncomingAddRequest) SetAdditionalInfo(info *AdditionalInfo) *MerchantIncomingAddRequest {
	r.AdditionalInfo = info
	return r
}

// SetSmsConfig 设置是否给商户发短信
func (r *MerchantIncomingAddRequest) SetSmsConfig(config *SmsConfig) *MerchantIncomingAddRequest {
	r.SmsConfig = config
	return r
}

// SetFuncInfo 设置开通商户业务功能
func (r *MerchantIncomingAddRequest) SetFuncInfo(info *FuncInfo) *MerchantIncomingAddRequest {
	r.FuncInfo = info
	return r
}

// SetChainStoreInfo 设置品牌连锁商户进件配置信息
func (r *MerchantIncomingAddRequest) SetChainStoreInfo(info *ChainStoreInfo) *MerchantIncomingAddRequest {
	r.ChainStoreInfo = info
	return r
}

// SetBrandInfo 设置品牌信息
func (r *MerchantIncomingAddRequest) SetBrandInfo(info *BrandInfo) *MerchantIncomingAddRequest {
	r.BrandInfo = info
	return r
}

// SetRawRequestMap 设置原始请求数据
func (r *MerchantIncomingAddRequest) SetRawRequestMap(requestMap map[string]interface{}) *MerchantIncomingAddRequest {
	r.RawRequestMap = requestMap
	return r
}

// GetRawRequestMap 获取原始请求数据
func (r *MerchantIncomingAddRequest) GetRawRequestMap() (map[string]interface{}, bool) {
	if r.RawRequestMap == nil || len(r.RawRequestMap) == 0 {
		return nil, false
	}
	return r.RawRequestMap, true
}

// GetRawMap 实现RawMapGetter接口
func (r *MerchantIncomingAddRequest) GetRawMap() (map[string]interface{}, bool) {
	return r.GetRawRequestMap()
}

// MerchantIncomingAddResponse 商户进件响应
type MerchantIncomingAddResponse struct {
	StandardResponse
	// 申请单编号
	ApplyID string `json:"apply_id,omitempty"`
}

// MerchantIncomingModifyRequest 进件修改请求
type MerchantIncomingModifyRequest struct {
	OrgBaseRequest
	// 商户基础信息
	BaseInfo *BaseInfo `json:"base_info,omitempty"`
	// 商户身份信息
	IdentificationInfo *IdentificationInfo `json:"identification_info,omitempty"`
	// 商户经营信息
	BusinessInfo *BusinessInfo `json:"business_info,omitempty"`
	// 商户结算账户信息
	SettlementInfo *SettlementInfo `json:"settlement_info,omitempty"`
	// 商户结算规则、费率规则
	SettlementRule *SettlementRule `json:"settlement_rule,omitempty"`
	// 渠道信息、银行合作信息等
	AdditionalInfo *AdditionalInfo `json:"additional_info,omitempty"`
	// 是否给商户发短信
	SmsConfig *SmsConfig `json:"sms_config,omitempty"`
	// 开通商户业务功能
	FuncInfo *FuncInfo `json:"func_info,omitempty"`
	// 品牌连锁商户进件配置信息
	ChainStoreInfo *ChainStoreInfo `json:"chain_store_info,omitempty"`
	// 品牌信息
	BrandInfo *BrandInfo `json:"brand_info,omitempty"`
	// 原始请求数据Map（用于直接传递JSON请求数据）
	RawRequestMap map[string]interface{} `json:"-"`
}

// NewMerchantIncomingModifyRequest 创建进件修改请求
func NewMerchantIncomingModifyRequest() *MerchantIncomingModifyRequest {
	req := &MerchantIncomingModifyRequest{}
	// 添加与Python SDK一致的敏感字段
	// 基础信息中的敏感字段
	req.AddSensitiveField("base_info.contact_info.contact_name")
	req.AddSensitiveField("base_info.contact_info.contact_phone")
	req.AddSensitiveField("base_info.contact_info.contact_id_no")

	// 身份信息中的敏感字段
	req.AddSensitiveField("identification_info.identity_info.id_card_name")
	req.AddSensitiveField("identification_info.identity_info.id_card_english_name")
	req.AddSensitiveField("identification_info.identity_info.id_card_no")
	req.AddSensitiveField("identification_info.identity_info.legal_person_phone")
	req.AddSensitiveField("identification_info.identity_info.id_card_address")

	// 结算信息中的敏感字段
	req.AddSensitiveField("settlement_info.account_info.account_no")
	req.AddSensitiveField("settlement_info.account_info.account_name")
	req.AddSensitiveField("settlement_info.account_info.bank_set_phone")
	req.AddSensitiveField("settlement_info.account_info.delegatee_name")
	req.AddSensitiveField("settlement_info.account_info.delegatee_id_card")
	req.AddSensitiveField("settlement_info.account_info.delegatee_phone")

	// 补充信息中的敏感字段
	req.AddSensitiveField("additional_info.specs_info.account_no")
	req.AddSensitiveField("additional_info.specs_info.account_name")

	// 品牌信息中的敏感字段
	req.AddSensitiveField("brand_info.contact_name")
	req.AddSensitiveField("brand_info.contact_phone")

	return req
}

// SetBaseInfo 设置商户基础信息
func (r *MerchantIncomingModifyRequest) SetBaseInfo(info *BaseInfo) *MerchantIncomingModifyRequest {
	r.BaseInfo = info
	return r
}

// SetIdentificationInfo 设置商户身份信息
func (r *MerchantIncomingModifyRequest) SetIdentificationInfo(info *IdentificationInfo) *MerchantIncomingModifyRequest {
	r.IdentificationInfo = info
	return r
}

// SetBusinessInfo 设置商户经营信息
func (r *MerchantIncomingModifyRequest) SetBusinessInfo(info *BusinessInfo) *MerchantIncomingModifyRequest {
	r.BusinessInfo = info
	return r
}

// SetSettlementInfo 设置商户结算账户信息
func (r *MerchantIncomingModifyRequest) SetSettlementInfo(info *SettlementInfo) *MerchantIncomingModifyRequest {
	r.SettlementInfo = info
	return r
}

// SetSettlementRule 设置商户结算规则、费率规则
func (r *MerchantIncomingModifyRequest) SetSettlementRule(rule *SettlementRule) *MerchantIncomingModifyRequest {
	r.SettlementRule = rule
	return r
}

// SetAdditionalInfo 设置渠道信息、银行合作信息等
func (r *MerchantIncomingModifyRequest) SetAdditionalInfo(info *AdditionalInfo) *MerchantIncomingModifyRequest {
	r.AdditionalInfo = info
	return r
}

// SetSmsConfig 设置是否给商户发短信
func (r *MerchantIncomingModifyRequest) SetSmsConfig(config *SmsConfig) *MerchantIncomingModifyRequest {
	r.SmsConfig = config
	return r
}

// SetFuncInfo 设置开通商户业务功能
func (r *MerchantIncomingModifyRequest) SetFuncInfo(info *FuncInfo) *MerchantIncomingModifyRequest {
	r.FuncInfo = info
	return r
}

// SetChainStoreInfo 设置品牌连锁商户进件配置信息
func (r *MerchantIncomingModifyRequest) SetChainStoreInfo(info *ChainStoreInfo) *MerchantIncomingModifyRequest {
	r.ChainStoreInfo = info
	return r
}

// SetBrandInfo 设置品牌信息
func (r *MerchantIncomingModifyRequest) SetBrandInfo(info *BrandInfo) *MerchantIncomingModifyRequest {
	r.BrandInfo = info
	return r
}

// SetRawRequestMap 设置原始请求数据
func (r *MerchantIncomingModifyRequest) SetRawRequestMap(requestMap map[string]interface{}) *MerchantIncomingModifyRequest {
	r.RawRequestMap = requestMap
	return r
}

// GetRawRequestMap 获取原始请求数据
func (r *MerchantIncomingModifyRequest) GetRawRequestMap() (map[string]interface{}, bool) {
	if r.RawRequestMap == nil || len(r.RawRequestMap) == 0 {
		return nil, false
	}
	return r.RawRequestMap, true
}

// GetRawMap 实现RawMapGetter接口
func (r *MerchantIncomingModifyRequest) GetRawMap() (map[string]interface{}, bool) {
	return r.GetRawRequestMap()
}

// MerchantIncomingModifyResponse 进件修改响应
type MerchantIncomingModifyResponse struct {
	StandardResponse
	// 申请单编号
	ApplyID string `json:"apply_id,omitempty"`
}

// RealnameQueryRequest 微信支付宝认证查询请求
type RealnameQueryRequest struct {
	OrgBaseRequest
	// 嘉联商户号
	MerchNo string `json:"merch_no,omitempty"`
	// 查询类型：0-申请单查询（默认）；1-授权结果查询
	QueryType string `json:"query_type,omitempty"`
	// 渠道类型：00-所有渠道(默认)；01-wechat；02-alipay
	ChannelType string `json:"channel_type,omitempty"`
	// 原始请求数据Map（用于直接传递JSON请求数据）
	RawRequestMap map[string]interface{} `json:"-"`
}

// NewRealnameQueryRequest 创建微信支付宝认证查询请求
func NewRealnameQueryRequest() *RealnameQueryRequest {
	return &RealnameQueryRequest{}
}

// SetMerchNo 设置商户号
func (r *RealnameQueryRequest) SetMerchNo(merchNo string) *RealnameQueryRequest {
	r.MerchNo = merchNo
	return r
}

// SetQueryType 设置查询类型
func (r *RealnameQueryRequest) SetQueryType(queryType string) *RealnameQueryRequest {
	r.QueryType = queryType
	return r
}

// SetChannelType 设置渠道类型
func (r *RealnameQueryRequest) SetChannelType(channelType string) *RealnameQueryRequest {
	r.ChannelType = channelType
	return r
}

// SetRawRequestMap 设置原始请求数据
func (r *RealnameQueryRequest) SetRawRequestMap(requestMap map[string]interface{}) *RealnameQueryRequest {
	r.RawRequestMap = requestMap
	return r
}

// GetRawRequestMap 获取原始请求数据
func (r *RealnameQueryRequest) GetRawRequestMap() (map[string]interface{}, bool) {
	if r.RawRequestMap == nil || len(r.RawRequestMap) == 0 {
		return nil, false
	}
	return r.RawRequestMap, true
}

// GetRawMap 实现RawMapGetter接口
func (r *RealnameQueryRequest) GetRawMap() (map[string]interface{}, bool) {
	return r.GetRawRequestMap()
}

// ToMap 将请求转换为map
func (r *RealnameQueryRequest) ToMap() (map[string]interface{}, error) {
	result := make(map[string]interface{})

	// 添加基类字段
	if r.OrgNo != "" {
		result["org_no"] = r.OrgNo
	}
	if r.MerchNo != "" {
		result["merch_no"] = r.MerchNo
	}

	// 添加本类字段
	if r.QueryType != "" {
		result["query_type"] = r.QueryType
	}
	if r.ChannelType != "" {
		result["channel_type"] = r.ChannelType
	}

	return result, nil
}

// RealnameInfo 微信支付宝认证信息
type RealnameInfo struct {
	// 渠道类型：01-wechat；02-alipay
	ChannelType string `json:"channel_type,omitempty"`
	// 申请状态：1-审核中；2-待确认联系信息；3-待账户验证；4-审核通过；5-审核驳回；6-已冻结；7-已作废；200-已授权
	ApplymentStatus string `json:"applyment_status,omitempty"`
	// 二维码URL地址，申请状态为2、3、4、6时，会返回该链接
	QrcodeData string `json:"qrcode_data,omitempty"`
	// 驳回的字段名，审核驳回时有值
	RejectParam string `json:"reject_param,omitempty"`
	// 实名认证驳回原因，审核驳回时有值
	RejectReason string `json:"reject_reason,omitempty"`
	// 授权状态：200-已授权；201-未授权
	AuthorizeState string `json:"authorize_state,omitempty"`
}

// RealnameQueryResponse 微信支付宝认证查询响应
type RealnameQueryResponse struct {
	StandardResponse
	// 认证信息
	RealnameInfo []*RealnameInfo `json:"realname_info,omitempty"`
}

// --------------- 数据模型定义 ---------------

// ContactInfo 联系人信息
type ContactInfo struct {
	// 联系人类型：65-经营者/法人；66-经办人
	ContactType string `json:"contact_type,omitempty"`
	// 联系人姓名，当联系人类型是66时必填（敏感信息加密）
	ContactName string `json:"contact_name,omitempty"`
	// 联系人手机号，当联系人类型是66时必填（敏感信息加密）
	ContactPhone string `json:"contact_phone,omitempty"`
	// 联系人身份证号，当联系人类型是66时必填（敏感信息加密）
	ContactIdNo string `json:"contact_id_no,omitempty"`
	// 联系人证件有效期开始时间，当联系人类型是66时必填，格式：yyyy-MM-dd
	ContactPeriodBegin string `json:"contact_period_begin,omitempty"`
	// 联系人证件有效期结束时间，当联系人类型是66时必填，格式：yyyy-MM-dd，长期证件填写：2099-12-31
	ContactPeriodEnd string `json:"contact_period_end,omitempty"`
	// 联系人证件正面照片，当联系人类型是66时必填
	ContactIdDocCopy string `json:"contact_id_doc_copy,omitempty"`
	// 联系人证件反面照片，当联系人类型是66时必填
	ContactIdDocNational string `json:"contact_id_doc_national,omitempty"`
}

// BaseInfo 商户基础信息
type BaseInfo struct {
	// 开发者自定义的唯一编号，长度15位--32位，前缀为appid
	ApplyID string `json:"apply_id,omitempty"`
	// 产品类型：01-扫码商户；02-标准商户；03-场景商户；04-SaaS商户
	ProductType string `json:"product_type,omitempty"`
	// 签约模式：P-线下纸质协议；E-电子签章协议；J-嘉联电子协议
	SignMode string `json:"sign_mode,omitempty"`
	// 授权收款签约模式：P-线下纸质协议；E-线上电子协议；J-嘉联电子协议
	DelegateeSignMode string `json:"delegatee_sign_mode,omitempty"`
	// 纸质协议图片，当sign_mode为P时，上传纸质协议的图片(支持多个，用|分隔)
	AgreementPic string `json:"agreement_pic,omitempty"`
	// 代理商编号
	AgentID string `json:"agent_id,omitempty"`
	// 是否自动生成码付终端号：0-不自动生成；1-自动生成
	QrcodeTermAuto string `json:"qrcode_term_auto,omitempty"`
	// 联系人信息，用于微信/支付宝意愿核验
	ContactInfo *ContactInfo `json:"contact_info,omitempty"`
}

// LicenseInfo 营业执照信息
type LicenseInfo struct {
	// 主体类型：01-个体工商户；02-企业；03-政府机关；04-事业单位；05-其他组织
	LicenseType string `json:"license_type,omitempty"`
	// 营业执照号码，主体为"01，02"时需要填写
	LicenseNo string `json:"license_no,omitempty"`
	// 证书编号，当主体类型为"03，04，05"时需填写
	CertNumber string `json:"cert_number,omitempty"`
	// 营业执照（或登记证书）上的名称
	LicenseName string `json:"license_name,omitempty"`
	// 登记证书地址，非营业执照类型需要填写
	LicenseAddress string `json:"license_address,omitempty"`
	// 营业执照注册开始日期，格式：yyyy-MM-dd
	PeriodBegin string `json:"period_begin,omitempty"`
	// 营业执照注册结束日期，格式：yyyy-MM-dd，长期证件填写：2099-12-31
	PeriodEnd string `json:"period_end,omitempty"`
	// 营业执照照片
	LicensePic string `json:"license_pic,omitempty"`
	// 经营范围
	BusinessScope string `json:"business_scope,omitempty"`
}

// IdentityInfo 身份信息
type IdentityInfo struct {
	// 证件类型：01-身份证；02-护照；03-外地来往内地通行证；09-港澳居民来往内地通行证；10-台湾同胞来往内地通行证；15-外国人永居留证；99-其他证件
	IdDocType string `json:"id_doc_type,omitempty"`
	// 经营者/法人的证件姓名（敏感信息加密）
	IdCardName string `json:"id_card_name,omitempty"`
	// 经营者/法人的证件英文名称（敏感信息加密）
	IdCardEnglishName string `json:"id_card_english_name,omitempty"`
	// 经营者/法人的证件号码（敏感信息加密）
	IdCardNo string `json:"id_card_no,omitempty"`
	// 经营者/法人的手机号（敏感信息加密）
	LegalPersonPhone string `json:"legal_person_phone,omitempty"`
	// 身份证件有效期开始时间，格式：yyyy-MM-dd
	CardPeriodBegin string `json:"card_period_begin,omitempty"`
	// 身份证件有效期结束时间，格式：yyyy-MM-dd，长期证件填写：2099-12-31
	CardPeriodEnd string `json:"card_period_end,omitempty"`
	// 证件上住址（敏感信息加密）
	IdCardAddress string `json:"id_card_address,omitempty"`
	// 证件正面照片
	IdCardCopy string `json:"id_card_copy,omitempty"`
	// 证件反面照片
	IdCardNational string `json:"id_card_national,omitempty"`
	// 性别：01-男；02-女，类型为身份证时可不传，其他类型需要提交
	Gender string `json:"gender,omitempty"`
	// 国籍，类型为身份证时可不传，其他类型需要提交
	Nationality string `json:"nationality,omitempty"`
}

// IdentificationInfo 商户身份信息
type IdentificationInfo struct {
	// 主体类型：0-小微；1-营业执照、政府机关、事业单位或其他组织
	MerchType string `json:"merch_type,omitempty"`
	// 营业执照信息，主体类型为1时填写
	LicenseInfo *LicenseInfo `json:"license_info,omitempty"`
	// 身份信息，小微经营者、执照法人信息
	IdentityInfo *IdentityInfo `json:"identity_info,omitempty"`
}

// BusinessInfo 商户经营信息
type BusinessInfo struct {
	// 商户经营名称，在支付完成页和账单中向持卡人展示
	MerchShortname string `json:"merch_shortname,omitempty"`
	// 商户英文名称
	MerchEnglishName string `json:"merch_english_name,omitempty"`
	// MCC码(4位)
	MccCode string `json:"mcc_code,omitempty"`
	// 业务场景编号，当产品类型为03时必填
	SceneID string `json:"scene_id,omitempty"`
	// 行政县/区码
	AddressCode string `json:"address_code,omitempty"`
	// 商户实际营业场所的详细地址，需要精确到门牌号
	AddressDetail string `json:"address_detail,omitempty"`
	// 门头照片
	DoorPic string `json:"door_pic,omitempty"`
	// 店内照片
	IndoorPic string `json:"indoor_pic,omitempty"`
	// 收银台照片
	CashierPic string `json:"cashier_pic,omitempty"`
}

// AccountInfo 账户信息
type AccountInfo struct {
	// 收款人银行卡号（敏感信息加密）
	AccountNo string `json:"account_no,omitempty"`
	// 结算账户名（敏感信息加密）
	AccountName string `json:"account_name,omitempty"`
	// 账户照片，对公账户时上传开户许可证照；银行卡时上传银行卡正面照
	AccountPic string `json:"account_pic,omitempty"`
	// 开户银行总行编号
	BankCode string `json:"bank_code,omitempty"`
	// 开户分支行联行号，单位结算卡、存折、对公结算卡必填
	BankBranchID string `json:"bank_branch_id,omitempty"`
	// 开户分支行名称
	BankBranchName string `json:"bank_branch_name,omitempty"`
	// 开户行预留手机号（敏感信息加密）
	BankSetPhone string `json:"bank_set_phone,omitempty"`
	// 证件类型，当结算类型为03填写收款人证件类型，当结算类型为04填写收款公司法人证件类型，01-身份证（默认）；15-外国人居留证
	CertType string `json:"cert_type,omitempty"`
	// 受托人姓名，当结算类型为03，04时必填（敏感信息加密）
	DelegateeName string `json:"delegatee_name,omitempty"`
	// 受托人身份证，当结算类型为03，04时必填（敏感信息加密）
	DelegateeIdCard string `json:"delegatee_id_card,omitempty"`
	// 受托人证件有效期开始时间，当结算类型为03，04时必填，格式：yyyy-MM-dd
	DelegateeCertPeriodBegin string `json:"delegatee_cert_period_begin,omitempty"`
	// 受托人证件有效期结束时间，当结算类型为03，04时必填，格式：yyyy-MM-dd，长期证件填写：2099-12-31
	DelegateeCertPeriodEnd string `json:"delegatee_cert_period_end,omitempty"`
	// 受托人手机号，当结算类型为03，04时必填（敏感信息加密）
	DelegateePhone string `json:"delegatee_phone,omitempty"`
	// 受托公司营业执照号，当签约模式为E且结算类型为04时必填
	DelegateeLicenseNo string `json:"delegatee_license_no,omitempty"`
	// 受托公司名称，当签约模式为E且结算类型为04时必填
	DelegateeLicenseName string `json:"delegatee_license_name,omitempty"`
}

// OtherInfo 授权收款材料
type OtherInfo struct {
	// 实际收款公司（受托公司）的营业执照，当结算类型为04时必填
	AcctLicense string `json:"acct_license,omitempty"`
	// 实际收款人（受托人）的身份证正面照，结算类型为03时必填
	AcctCertFrontPic string `json:"acct_cert_front_pic,omitempty"`
	// 实际收款人（受托人）的身份证反面照，结算类型为03时必填
	AcctCertBackPic string `json:"acct_cert_back_pic,omitempty"`
	// 实际收款人（受托人）的人脸照片，结算类型为03时必填
	AcctFacePic string `json:"acct_face_pic,omitempty"`
	// 商户法人（委托人）人脸图片，当结算类型为03，04时必填
	IdentityFacePic string `json:"identity_face_pic,omitempty"`
	// 授权收款协议纸质协议，当结算类型为03，04时必填
	AcctAuthLetter string `json:"acct_auth_letter,omitempty"`
}

// SettlementInfo 商户结算账户信息
type SettlementInfo struct {
	// 结算类型：01-打款至法人银行卡；02-打款至对公账户；03-对私授权收款；04-对公授权收款
	SettleType string `json:"settle_type,omitempty"`
	// 授权人与被授权人之间的关系：01-股东/雇佣；02-总分公司；03-母子公司；09-其它
	SettleRelation string `json:"settle_relation,omitempty"`
	// 授权人与被授权人之间的具体关系，当结算关系为09时必填
	SettleRelationDetail string `json:"settle_relation_detail,omitempty"`
	// 账户信息
	AccountInfo *AccountInfo `json:"account_info,omitempty"`
	// 授权收款材料，非授权收款无须提供
	OtherInfo *OtherInfo `json:"other_info,omitempty"`
}

// SettleInfo 结算规则设置
type SettleInfo struct {
	// 结算模式：2-T0；3-仅T1；7-仅D1
	SettleMode string `json:"settle_mode,omitempty"`
	// 账单日切点：000000-昨天0点到今天0点；040000-昨天4点到今天4点；080000-昨天8点到今天8点
	DayCut string `json:"day_cut,omitempty"`
	// 付款时间：040000-4点付款；070000-7点付款
	SettleSession string `json:"settle_session,omitempty"`
	// 是否允许商户后台变更结算账户：0-否；1-是
	AccountChangeFlag string `json:"account_change_flag,omitempty"`
	// 银行账单附言，最长不超过40个英文字符
	Postscript string `json:"postscript,omitempty"`
}

// RateInfo 交易费率设置
type RateInfo struct {
	// 费率类型：30-微信；31-支付宝；03-银联二维码；01-银联内卡借记卡；02-银联内卡贷记卡；T0-快速提现
	FeeCalcType string `json:"fee_calc_type,omitempty"`
	// 起始金额区间(分为单位)，默认0
	MinAmt string `json:"min_amt,omitempty"`
	// 截止金额区间(分为单位)，默认-1表示无穷大
	MaxAmt string `json:"max_amt,omitempty"`
	// 费率标识：0-固定费率；1-固定金额
	Fixed string `json:"fixed,omitempty"`
	// 支付手续费，最多到小数点后4位
	Rate string `json:"rate,omitempty"`
	// 保底收费(分为单位)，默认0
	Bottom string `json:"bottom,omitempty"`
	// 封顶收费(分为单位)，默认-1表示不封顶
	Top string `json:"top,omitempty"`
	// 阶梯收费(分为单位)，默认0
	Step string `json:"step,omitempty"`
	// 阶梯基础金额(分为单位)，默认0
	BaseAmount string `json:"base_amount,omitempty"`
	// 阶梯基础金额以下收费(分为单位)，默认0
	BaseFee string `json:"base_fee,omitempty"`
}

// SettlementRule 商户结算规则、费率规则
type SettlementRule struct {
	// 结算规则设置
	SettleInfo *SettleInfo `json:"settle_info,omitempty"`
	// 交易费率设置
	RateInfo *RateInfo `json:"rate_info,omitempty"`
}

// ReportInfo 渠道入驻信息
type ReportInfo struct {
	// 支付授权目录,支付页面url，以/结尾
	WechatJsapiPath string `json:"wechat_jsapi_path,omitempty"`
	// 小程序appid或者公众号appid
	WechatSubAppid string `json:"wechat_sub_appid,omitempty"`
	// 用于该商户入驻微信归属的服务商
	WechatPid string `json:"wechat_pid,omitempty"`
	// 用于该商户入驻支付宝归属的服务商
	AlipayPid string `json:"alipay_pid,omitempty"`
}

// ProofInfo 补充材料
type ProofInfo struct {
	// 类型
	Type string `json:"type,omitempty"`
	// 文件类型：1-图片；2-pdf；3-视频
	FileType string `json:"file_type,omitempty"`
	// 文件路径
	MediaPath string `json:"media_path,omitempty"`
}

// CoopBankInfo 银行合作信息
type CoopBankInfo struct {
	// 客户经理工号
	BankServerID string `json:"bank_server_id,omitempty"`
	// 银行分支行号
	BankCode string `json:"bank_code,omitempty"`
}

// SpecsInfo 授权收款时，需填法人结算卡信息、或者对公结算信息
type SpecsInfo struct {
	// 结算类型：01-法人结算；02-企业结算
	SettleType string `json:"settle_type,omitempty"`
	// 收款账号（敏感信息加密）
	AccountNo string `json:"account_no,omitempty"`
	// 收款账户名（敏感信息加密）
	AccountName string `json:"account_name,omitempty"`
	// 开户银行总行编号
	BankCode string `json:"bank_code,omitempty"`
	// 开户分支行联行号
	BankBranchID string `json:"bank_branch_id,omitempty"`
	// 开户分支行名称
	BankBranchName string `json:"bank_branch_name,omitempty"`
	// 账户照片
	AccountPic string `json:"account_pic,omitempty"`
}

// AdditionalInfo 渠道信息、银行合作信息等
type AdditionalInfo struct {
	// 渠道入驻信息
	ReportInfo *ReportInfo `json:"report_info,omitempty"`
	// 补充材料
	ProofInfo *ProofInfo `json:"proof_info,omitempty"`
	// 银行合作信息
	CoopBankInfo *CoopBankInfo `json:"coop_bank_info,omitempty"`
	// 授权收款时，需填法人结算卡信息、或者对公结算信息
	SpecsInfo *SpecsInfo `json:"specs_info,omitempty"`
}

// SmsConfig 是否给商户发短信
type SmsConfig struct {
	// 是否发送商户登录通知：0-不发送；1-发送
	MerchLoginNotify string `json:"merch_login_notify,omitempty"`
	// 是否发送提现密码通知：0-不发送；1-发送
	WithdrawPasswordNotify string `json:"withdraw_password_notify,omitempty"`
	// 是否发送签约通知：0-不发送；1-发送
	SignNotify string `json:"sign_notify,omitempty"`
	// 是否发送实名认证通知：0-不发送；1-发送
	RealnameNotify string `json:"realname_notify,omitempty"`
}

// FuncInfo 开通商户业务功能
type FuncInfo struct {
	// 需开通的业务功能，数组格式：01-支付宝优享；02-部分退款退手续费
	OpenFunctions []string `json:"open_functions,omitempty"`
}

// ChainStoreInfo 品牌连锁商户进件配置信息
type ChainStoreInfo struct {
	// 门店级别：1-总店；2-分店
	Level string `json:"level,omitempty"`
	// 总店商户号，分店进件必传
	MainMerchNo string `json:"main_merch_no,omitempty"`
	// 模式：0-独立模式；1-共享模式，分店进件必传
	AtMode string `json:"at_mode,omitempty"`
}

// BrandInfo 品牌信息
type BrandInfo struct {
	// 品牌名称
	BrandName string `json:"brand_name,omitempty"`
	// 品牌商标照片
	BrandMarkPic string `json:"brand_mark_pic,omitempty"`
	// 品牌授权函照片
	BrandAuthPic string `json:"brand_auth_pic,omitempty"`
	// 品牌联系人，可以是法人也可以法人授权的其他人
	ContactName string `json:"contact_name,omitempty"`
	// 联系人手机号，用于接受集团后台开通通知、重置密码等信息
	ContactPhone string `json:"contact_phone,omitempty"`
}
